import { IPSAppModule } from '../ipsapp-module';
import { IPSAppPortletCat } from '../control/ipsapp-portlet-cat';
import { IPSAppDEACMode } from './ipsapp-deacmode';
import { IPSAppDEAction } from './ipsapp-deaction';
import { IPSAppDEDataExport } from './ipsapp-dedata-export';
import { IPSAppDEDataImport } from './ipsapp-dedata-import';
import { IPSAppDEDataSet } from './ipsapp-dedata-set';
import { IPSAppDEField } from './ipsapp-defield';
import { IPSAppDELogic } from './ipsapp-delogic';
import { IPSAppDEMethod } from './ipsapp-demethod';
import { IPSAppDEMethodDTO } from './ipsapp-demethod-dto';
import { IPSAppDEPrint } from './ipsapp-deprint';
import { IPSAppDERS } from './ipsapp-ders';
import { IPSAppDEUIAction } from './ipsapp-deuiaction';
import { IPSAppDEUILogic } from './ipsapp-deuilogic';
import { IPSAppLocalDE } from '../mob/ipsapp-local-de';
import { IPSAppView } from '../view/ipsapp-view';
import { IPSDataEntity } from '../../dataentity/ipsdata-entity';
import { IPSDER1N } from '../../dataentity/der/ipsder1-n';
import { IPSDEMainState } from '../../dataentity/mainstate/ipsdemain-state';
import { IPSDEOPPriv } from '../../dataentity/priv/ipsdeoppriv';
import { IPSDEServiceAPI } from '../../dataentity/service/ipsdeservice-api';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSSysImage } from '../../res/ipssys-image';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';
import { IPSSysServiceAPI } from '../../service/ipssys-service-api';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSAppDataEntity
 */
export interface IPSAppDataEntity extends IPSAppLocalDE {
  /**
   * 实体自填模式集合
   *
   * @type {IPSAppDEACMode[]}
   */
  getAllPSAppDEACModes(): IPSAppDEACMode[] | null;

  /**
   * 实体自填模式集合
   *
   * @type {IPSAppDEACMode[]}
   */
  get allPSAppDEACModes(): IPSAppDEACMode[] | null;

  findPSAppDEACMode(objKey: any): IPSAppDEACMode | null;

  /**
   * 应用实体行为集合
   *
   * @type {IPSAppDEAction[]}
   */
  getAllPSAppDEActions(): IPSAppDEAction[] | null;

  /**
   * 应用实体行为集合
   *
   * @type {IPSAppDEAction[]}
   */
  get allPSAppDEActions(): IPSAppDEAction[] | null;

  findPSAppDEAction(objKey: any): IPSAppDEAction | null;

  /**
   * 实体数据导出集合
   *
   * @type {IPSAppDEDataExport[]}
   */
  getAllPSAppDEDataExports(): IPSAppDEDataExport[] | null;

  /**
   * 实体数据导出集合
   *
   * @type {IPSAppDEDataExport[]}
   */
  get allPSAppDEDataExports(): IPSAppDEDataExport[] | null;

  findPSAppDEDataExport(objKey: any): IPSAppDEDataExport | null;

  /**
   * 实体数据导入集合
   *
   * @type {IPSAppDEDataImport[]}
   */
  getAllPSAppDEDataImports(): IPSAppDEDataImport[] | null;

  /**
   * 实体数据导入集合
   *
   * @type {IPSAppDEDataImport[]}
   */
  get allPSAppDEDataImports(): IPSAppDEDataImport[] | null;

  findPSAppDEDataImport(objKey: any): IPSAppDEDataImport | null;

  /**
   * 应用实体数据集集合
   *
   * @type {IPSAppDEDataSet[]}
   */
  getAllPSAppDEDataSets(): IPSAppDEDataSet[] | null;

  /**
   * 应用实体数据集集合
   *
   * @type {IPSAppDEDataSet[]}
   */
  get allPSAppDEDataSets(): IPSAppDEDataSet[] | null;

  findPSAppDEDataSet(objKey: any): IPSAppDEDataSet | null;

  /**
   * 应用实体属性集合
   *
   * @type {IPSAppDEField[]}
   */
  getAllPSAppDEFields(): IPSAppDEField[] | null;

  /**
   * 应用实体属性集合
   *
   * @type {IPSAppDEField[]}
   */
  get allPSAppDEFields(): IPSAppDEField[] | null;

  findPSAppDEField(objKey: any): IPSAppDEField | null;

  /**
   * 应用实体逻辑集合
   *
   * @type {IPSAppDELogic[]}
   */
  getAllPSAppDELogics(): IPSAppDELogic[] | null;

  /**
   * 应用实体逻辑集合
   *
   * @type {IPSAppDELogic[]}
   */
  get allPSAppDELogics(): IPSAppDELogic[] | null;

  findPSAppDELogic(objKey: any): IPSAppDELogic | null;

  /**
   * 应用实体方法DTO对象集合
   *
   * @type {IPSAppDEMethodDTO[]}
   */
  getAllPSAppDEMethodDTOs(): IPSAppDEMethodDTO[] | null;

  /**
   * 应用实体方法DTO对象集合
   *
   * @type {IPSAppDEMethodDTO[]}
   */
  get allPSAppDEMethodDTOs(): IPSAppDEMethodDTO[] | null;

  findPSAppDEMethodDTO(objKey: any): IPSAppDEMethodDTO | null;

  /**
   * 应用实体方法集合
   *
   * @type {IPSAppDEMethod[]}
   */
  getAllPSAppDEMethods(): IPSAppDEMethod[] | null;

  /**
   * 应用实体方法集合
   *
   * @type {IPSAppDEMethod[]}
   */
  get allPSAppDEMethods(): IPSAppDEMethod[] | null;

  findPSAppDEMethod(objKey: any): IPSAppDEMethod | null;

  /**
   * 实体打印集合
   *
   * @type {IPSAppDEPrint[]}
   */
  getAllPSAppDEPrints(): IPSAppDEPrint[] | null;

  /**
   * 实体打印集合
   *
   * @type {IPSAppDEPrint[]}
   */
  get allPSAppDEPrints(): IPSAppDEPrint[] | null;

  findPSAppDEPrint(objKey: any): IPSAppDEPrint | null;

  /**
   * 实体界面行为集合
   *
   * @type {IPSAppDEUIAction[]}
   */
  getAllPSAppDEUIActions(): IPSAppDEUIAction[] | null;

  /**
   * 实体界面行为集合
   *
   * @type {IPSAppDEUIAction[]}
   */
  get allPSAppDEUIActions(): IPSAppDEUIAction[] | null;

  findPSAppDEUIAction(objKey: any): IPSAppDEUIAction | null;

  /**
   * 实体界面逻辑集合
   *
   * @type {IPSAppDEUILogic[]}
   */
  getAllPSAppDEUILogics(): IPSAppDEUILogic[] | null;

  /**
   * 实体界面逻辑集合
   *
   * @type {IPSAppDEUILogic[]}
   */
  get allPSAppDEUILogics(): IPSAppDEUILogic[] | null;

  findPSAppDEUILogic(objKey: any): IPSAppDEUILogic | null;

  /**
   * 实体门户部件分类集合
   *
   * @type {IPSAppPortletCat[]}
   */
  getAllPSAppPortletCats(): IPSAppPortletCat[] | null;

  /**
   * 实体门户部件分类集合
   *
   * @type {IPSAppPortletCat[]}
   */
  get allPSAppPortletCats(): IPSAppPortletCat[] | null;

  findPSAppPortletCat(objKey: any): IPSAppPortletCat | null;

  /**
   * 全部应用视图
   *
   * @type {IPSAppView[]}
   */
  getAllPSAppViews(): IPSAppView[] | null;

  /**
   * 全部应用视图
   *
   * @type {IPSAppView[]}
   */
  get allPSAppViews(): IPSAppView[] | null;

  findPSAppView(objKey: any): IPSAppView | null;

  /**
   * 实体主状态集合
   *
   * @type {IPSDEMainState[]}
   */
  getAllPSDEMainStates(): IPSDEMainState[] | null;

  /**
   * 实体主状态集合
   *
   * @type {IPSDEMainState[]}
   */
  get allPSDEMainStates(): IPSDEMainState[] | null;

  findPSDEMainState(objKey: any): IPSDEMainState | null;

  /**
   * 实体操作标识集合
   *
   * @type {IPSDEOPPriv[]}
   */
  getAllPSDEOPPrivs(): IPSDEOPPriv[] | null;

  /**
   * 实体操作标识集合
   *
   * @type {IPSDEOPPriv[]}
   */
  get allPSDEOPPrivs(): IPSDEOPPriv[] | null;

  findPSDEOPPriv(objKey: any): IPSDEOPPriv | null;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 实体服务接口代码标识
   * @type {string}
   */
  dEAPICodeName: string;

  /**
   * 实体服务接口代码标识2（复数）
   * @type {string}
   */
  dEAPICodeName2: string;

  /**
   * 实体服务接口标记
   * @type {string}
   */
  dEAPITag: string;

  /**
   * 属性组使用模式
   * @description 值模式 [实体服务接口属性组联合模式] {REPLACE：替换实体属性、 OVERWRITE：重定义实体属性、 EXCLUDE：排除属性组属性 }
   * @type {( string | 'REPLACE' | 'OVERWRITE' | 'EXCLUDE')}
   */
  dEFGroupMode: string | 'REPLACE' | 'OVERWRITE' | 'EXCLUDE';

  /**
   * 实体访问控制体系
   * @description 值模式 [系统权限控制体系] {1：运行子系统角色体系（默认）、 2：当前系统角色及实体角色 }
   * @type {( number | 1 | 2)}
   */
  dataAccCtrlArch: number | 1 | 2;

  /**
   * 实体数据访问控制方式
   * @description 值模式 [实体数据访问控制方式] {0：无控制、 1：自控制、 2：附属主实体控制、 3：附属主实体控制（未映射自控） }
   * @type {( number | 0 | 1 | 2 | 3)}
   */
  dataAccCtrlMode: number | 0 | 1 | 2 | 3;

  /**
   * 数据类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getDataTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 数据类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get dataTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 数据类型应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getDataTypePSAppDEFieldMust(): IPSAppDEField;

  /**
   * 默认实体数据导入
   *
   * @type {IPSAppDEDataExport}
   */
  getDefaultPSAppDEDataExport(): IPSAppDEDataExport | null;

  /**
   * 默认实体数据导入
   *
   * @type {IPSAppDEDataExport}
   */
  get defaultPSAppDEDataExport(): IPSAppDEDataExport | null;

  /**
   * 默认实体数据导入（必须存在）
   *
   * @type {IPSAppDEDataExport}
   */
  getDefaultPSAppDEDataExportMust(): IPSAppDEDataExport;

  /**
   * 默认实体数据导入
   *
   * @type {IPSAppDEDataImport}
   */
  getDefaultPSAppDEDataImport(): IPSAppDEDataImport | null;

  /**
   * 默认实体数据导入
   *
   * @type {IPSAppDEDataImport}
   */
  get defaultPSAppDEDataImport(): IPSAppDEDataImport | null;

  /**
   * 默认实体数据导入（必须存在）
   *
   * @type {IPSAppDEDataImport}
   */
  getDefaultPSAppDEDataImportMust(): IPSAppDEDataImport;

  /**
   * 默认实体打印
   *
   * @type {IPSAppDEPrint}
   */
  getDefaultPSAppDEPrint(): IPSAppDEPrint | null;

  /**
   * 默认实体打印
   *
   * @type {IPSAppDEPrint}
   */
  get defaultPSAppDEPrint(): IPSAppDEPrint | null;

  /**
   * 默认实体打印（必须存在）
   *
   * @type {IPSAppDEPrint}
   */
  getDefaultPSAppDEPrintMust(): IPSAppDEPrint;

  /**
   * 动态实例标记
   * @type {string}
   */
  dynaInstTag: string;

  /**
   * 实体支持界面行为
   * @description 值模式 [实体界面操作行为] {1：建立、 2：更新、 4：删除 }
   * @type {( number | 1 | 2 | 4)}
   */
  enableUIActions: number | 1 | 2 | 4;

  /**
   * 表单类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getFormTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 表单类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get formTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 表单类型应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getFormTypePSAppDEFieldMust(): IPSAppDEField;

  /**
   * 索引类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getIndexTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 索引类型应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get indexTypePSAppDEField(): IPSAppDEField | null;

  /**
   * 索引类型应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getIndexTypePSAppDEFieldMust(): IPSAppDEField;

  /**
   * 主键属性
   *
   * @type {IPSAppDEField}
   */
  getKeyPSAppDEField(): IPSAppDEField | null;

  /**
   * 主键属性
   *
   * @type {IPSAppDEField}
   */
  get keyPSAppDEField(): IPSAppDEField | null;

  /**
   * 主键属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getKeyPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get lNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageResMust(): IPSLanguageRes;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 主状态属性集合
   *
   * @type {IPSAppDEField[]}
   */
  getMainStatePSAppDEFields(): IPSAppDEField[] | null;

  /**
   * 主状态属性集合
   *
   * @type {IPSAppDEField[]}
   */
  get mainStatePSAppDEFields(): IPSAppDEField[] | null;

  findMainStatePSAppDEField(objKey: any): IPSAppDEField | null;

  /**
   * 主信息属性
   *
   * @type {IPSAppDEField}
   */
  getMajorPSAppDEField(): IPSAppDEField | null;

  /**
   * 主信息属性
   *
   * @type {IPSAppDEField}
   */
  get majorPSAppDEField(): IPSAppDEField | null;

  /**
   * 主信息属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getMajorPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 应用实体从关系集合
   *
   * @type {IPSAppDERS[]}
   */
  getMinorPSAppDERSs(): IPSAppDERS[] | null;

  /**
   * 应用实体从关系集合
   *
   * @type {IPSAppDERS[]}
   */
  get minorPSAppDERSs(): IPSAppDERS[] | null;

  findMinorPSAppDERS(objKey: any): IPSAppDERS | null;

  /**
   * 组织标识应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getOrgIdPSAppDEField(): IPSAppDEField | null;

  /**
   * 组织标识应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get orgIdPSAppDEField(): IPSAppDEField | null;

  /**
   * 组织标识应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getOrgIdPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 应用模块
   *
   * @type {IPSAppModule}
   */
  getPSAppModule(): IPSAppModule | null;

  /**
   * 应用模块
   *
   * @type {IPSAppModule}
   */
  get psAppModule(): IPSAppModule | null;

  /**
   * 应用模块（必须存在）
   *
   * @type {IPSAppModule}
   */
  getPSAppModuleMust(): IPSAppModule;

  /**
   * 实体名称
   * @type {string}
   */
  psDEName: string;

  /**
   * 实体名称
   * @type {string}
   */
  getPSDEName(): string;

  /**
   * 控制实体关系
   *
   * @type {IPSDER1N}
   */
  getPSDER1N(): IPSDER1N | null;

  /**
   * 控制实体关系
   *
   * @type {IPSDER1N}
   */
  get psDER1N(): IPSDER1N | null;

  /**
   * 控制实体关系（必须存在）
   *
   * @type {IPSDER1N}
   */
  getPSDER1NMust(): IPSDER1N;

  /**
   * 实体服务接口
   *
   * @type {IPSDEServiceAPI}
   */
  getPSDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 实体服务接口
   *
   * @type {IPSDEServiceAPI}
   */
  get psDEServiceAPI(): IPSDEServiceAPI | null;

  /**
   * 实体服务接口（必须存在）
   *
   * @type {IPSDEServiceAPI}
   */
  getPSDEServiceAPIMust(): IPSDEServiceAPI;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象
   *
   * @type {IPSDataEntity}
   */
  get psDataEntity(): IPSDataEntity | null;

  /**
   * 实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getPSDataEntityMust(): IPSDataEntity;

  /**
   * 系统图片资源
   *
   * @type {IPSSysImage}
   */
  getPSSysImage(): IPSSysImage | null;

  /**
   * 系统图片资源
   *
   * @type {IPSSysImage}
   */
  get psSysImage(): IPSSysImage | null;

  /**
   * 系统图片资源（必须存在）
   *
   * @type {IPSSysImage}
   */
  getPSSysImageMust(): IPSSysImage;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 服务接口
   *
   * @type {IPSSysServiceAPI}
   */
  getPSSysServiceAPI(): IPSSysServiceAPI | null;

  /**
   * 服务接口
   *
   * @type {IPSSysServiceAPI}
   */
  get psSysServiceAPI(): IPSSysServiceAPI | null;

  /**
   * 服务接口（必须存在）
   *
   * @type {IPSSysServiceAPI}
   */
  getPSSysServiceAPIMust(): IPSSysServiceAPI;

  /**
   * 快速搜索属性集合
   *
   * @type {IPSAppDEField[]}
   */
  getQuickSearchPSAppDEFields(): IPSAppDEField[] | null;

  /**
   * 快速搜索属性集合
   *
   * @type {IPSAppDEField[]}
   */
  get quickSearchPSAppDEFields(): IPSAppDEField[] | null;

  findQuickSearchPSAppDEField(objKey: any): IPSAppDEField | null;

  getRequestPaths(): string[] | null;

  get requestPaths(): string[] | null;

  /**
   * 本地存储模式
   * @description 值模式 [应用实体存储模式] {0：仅远程存储、 1：仅本地存储、 3：本地及远程存储、 4：DTO成员（无存储） }
   * @type {( number | 0 | 1 | 3 | 4)}
   */
  storageMode: number | 0 | 1 | 3 | 4;

  /**
   * 系统服务接口标记
   * @type {string}
   */
  sysAPITag: string;

  /**
   * 实体默认
   * @type {boolean}
   */
  defaultMode: boolean;

  /**
   * 启用实体主状态
   * @type {boolean}
   * @default false
   */
  enableDEMainState: boolean;

  /**
   * 提供过滤器相关行为
   * @type {boolean}
   */
  enableFilterActions: boolean;

  /**
   * 支持临时数据模式
   * @type {boolean}
   * @default false
   */
  enableTempData: boolean;

  /**
   * 支持界面建立
   * @type {boolean}
   */
  enableUICreate: boolean;

  /**
   * 支持界面修改
   * @type {boolean}
   */
  enableUIModify: boolean;

  /**
   * 支持界面删除
   * @type {boolean}
   */
  enableUIRemove: boolean;

  /**
   * 提供工作流相关行为
   * @type {boolean}
   */
  enableWFActions: boolean;

  /**
   * 主实体
   * @type {boolean}
   */
  major: boolean;
}
